﻿module Tokens

type Tokens =
    // Bad lexeme
    | ERROR of string

    // Lines
    | LINE of string
    | NEW_LINE of string
    | SHARP_LINE of string
    | EOF

    // Main tokens in one line
    | IDENTIFIER of string
    | FLOAT of string
    | INTNUM of string
    | HEXNUM of string
    | OCTNUM of string
    | STRING of string
    | CHAR of string
    | WHITE of string

    // TODO: quit, dots, sizeof, __asm, __pragma

    // Operators with '='
    | PLUS_EQ     // +=
    | MINUS_EQ    // -=
    | STAR_EQ     // *=
    | SLASH_EQ    // /=
    | PERCENT_EQ  // %=
    | PIPE_EQ     // |=
    | AND_EQ      // &=
    | CIRC_EQ     // ^=
    | INF_INF_EQ  // <<=
    | SUP_SUP_EQ  // >>=
    | INF_INF     // <<
    | SUP_SUP     // >>
    // Compare
    | EQ_EQ       // ==
    | EXCLAM_EQ   // !=
    | INF_EQ      // <=
    | SUP_EQ      // >=
    | INF         // < 
    | SUP         // > 
    
    | EQ          // =
    | PLUS_PLUS   // ++
    | MINUS_MINUS // --
    | ARROW       // ->
    | PLUS        // + 
    | MINUS       // - 
    | STAR        // * 
    | SLASH       // / 
    | PERCENT     // % 
    | EXCLAM      // ! 
    | AND_AND     // &&
    | PIPE_PIPE   // ||
    | AND         // & 
    | PIPE        // |
    | CIRC        // ^
    | QUEST       // ?
    | COLON       // :
    | TILDE       // ~
    // Brackets
    | LBRACE      // {
    | RBRACE      // }
    | LBRACKET    // [
    | RBRACKET    // ]
    | LPAREN      // (
    | RPAREN      // )

    | ELLIPSIS    // ...
    | SEMICOLON   // ;
    | DOT         // .
    | COMMA       // ,
